package com.sxt;

import java.awt.*;

/**
 * @author 谭梦寻
 * @version 1.1
 * 实例变量：我们创建了类的多个对象，每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的
 * 静态属性时，不会导致其他对象中同样的属性值的修改
 */
public class Bg {
    //    关卡数
    static int level = 1;
    //    目标得分
    int goal = level * 15;
    //    总分
    static int count = 0;
    //    药水数量
    static int waterNum = 3;
    //    药水状态 默认是false true是正在使用
    static Boolean waterFlag = false;
//    设置游戏开始时间和结束时间 每一关二十秒
    long startTime;
    long endTime;
//    药水价格
    int price = (int)(Math.random()*10);
//    是否进入商店
    boolean shop = false;
    //    载入药水
    Image water = Toolkit.getDefaultToolkit().getImage("img/water.png");
    //    将图片载入程序中
    Image bg = Toolkit.getDefaultToolkit().getImage("img/bg.jpg");
    Image bg1 = Toolkit.getDefaultToolkit().getImage("img/bg1.jpg");
    Image peo = Toolkit.getDefaultToolkit().getImage("img/peo.png");

    //    绘制方法
    void paintSelf(Graphics g) {
        g.drawImage(bg1, 0, 0, null);
        g.drawImage(bg, 0, 200, null);
//        药水和背景任何时候都会绘制 但积分和目标只在游戏里才会绘制
        switch (GameWin.state) {
            case 0://未开始  点击鼠标右键开始游戏
                drawWord(g,80,Color.green,"准备开始",200,400);
                break;
            case 1:
                g.drawImage(peo, 310, 50, null);
                drawWord(g, 30, Color.BLACK, "积分:" + count, 30, 150);
//        药水组件
                g.drawImage(water, 450, 40, null);
                drawWord(g, 30, Color.BLACK, "*" + waterNum, 510, 70);
//        绘制关卡数 目标积分
                drawWord(g, 20, Color.BLACK, "第" + level + "关", 30, 60);
                drawWord(g, 30, Color.BLACK, "目标：" + goal, 30, 110);
//                时间组件
                endTime = System.currentTimeMillis();
//                倒计时
                long tim = 20 - (endTime - startTime) /1000;
                drawWord(g,30,Color.BLACK,"时间"+ (tim>0?tim:0),520,150);
                break;
            case 2://商店
                g.drawImage(water, 300,400,null);
                drawWord(g, 30, Color.BLACK, "价格" + price, 300, 500);
                drawWord(g, 30, Color.BLACK, "是否购买？", 300, 550);
                if (shop) {
                    count = count - price;//积分数减掉价格
                    waterNum++;
                    shop = false;
                    GameWin.state = 1;
//                    重新计时 在鼠标点击右键已经重新计时了 见GameWin代码 switch2里
//                    startTime = System.currentTimeMillis();
                }
                break;
            case 3: //失败
//                打印失败和积分
                drawWord(g, 80, Color.cyan, "失败", 250, 350);
                drawWord(g, 80, Color.cyan, "积分:" + count, 35, 150);
                break;
            case 4: //胜利
                //                打印成功和积分
                drawWord(g, 80, Color.red, "成功", 250, 350);
                drawWord(g, 80, Color.red, "积分:" + count, 35, 150);
                break;
            default:


        }
    }

//    判断倒计时的方法 true倒计时完成 false正在倒计时
    boolean gameTime() {
//        (endTime - startTime)/1000 将时间换算成秒
        long tim = (endTime - startTime)/1000;
        if (tim>20) {
//            倒计时结束
            return true;
        }else {
            return false;
        }
    }

//    重置元素
    void reGame() {
        //    关卡数
        level = 1;
        //    目标得分
        goal = level * 15;
        //    总分
        int count = 0;
        //    药水数量
        int waterNum = 3;
        //    药水状态 默认是false true是正在使用
        Boolean waterFlag = false;
    }

    //    绘制字符
    public static void drawWord(Graphics g, int size, Color color, String str, int x, int y) {
        //        积分
//        g.setColor(Color.BLACK);//设置字符串的颜色
//        g.setFont(new Font("仿宋", Font.BOLD, 30));
//        g.drawString("积分:" + count, 30, 150);
        g.setColor(color);
        g.setFont(new Font("仿宋", Font.BOLD, size));
        g.drawString(str, x, y);
    }


}
